home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 2: CDPD 1
/
Almathera Ten on Ten - Disc 2: CDPD 1.iso
/
pd
/
576-600
/
592
/
star
/
star.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-15
|
5KB
|
225 lines
#include <intuition/intuition.h>
#include "star.h"
#define HEIGHT 400
#define WIDTH 640
#define DEPTH 4
struct Window *win;
struct Screen *scr;
struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct ViewPort *vp;
struct RastPort *rp;
struct IntuiMessage *message;
USHORT class;
USHORT code;
struct NewScreen ns =
{ 0,0,WIDTH,HEIGHT,DEPTH,0,1,HIRES+LACE, /* View modes */
CUSTOMSCREEN, /* Screen type */
NULL, /* Font */
NULL,NULL,NULL /* CustomBitmap */ };
struct NewWindow nw =
{ 0,0,WIDTH,HEIGHT,0,1,MOUSEBUTTONS, /* IDCMP flags */
ACTIVATE|BORDERLESS|RMBTRAP, /* Flags */
NULL,NULL,NULL, /* Gadget,Checkmark,Name */
NULL,NULL, /* Screen,BitMap */
WIDTH,HEIGHT,100,100, /* Max Width,Height, Min Width,Height */
CUSTOMSCREEN };
int *values1,*values2,*values3; /* Declare 3 pointers to my 3 sets of points */
void _main()
{
int x,times=0;
Open_Stuff();
Init_Colour();
values1=Init_Values(30,30);
values2=Init_Values(60,61); /* Initialize 3 sets of points */
values3=Init_Values(100,301);
if(values1==0 || values2==0 || values3==0)
die(" I can't allocate memory for my points!");
Clear_Rastport();
while(idcmpch()!=1) /* Draw Stars until the user presses the LMB */
{
for(x=0;x<2;x++)
{
times++;
SetAPen(rp,rand()%15+1);
Draw_Star(rp,values1,rand()%500+40,rand()%300+40,rand()%20+5);
SetAPen(rp,rand()%15+1);
Draw_Star(rp,values2,rand()%500+70,rand()%260+70,rand()%40+10);
SetAPen(rp,rand()%15+1);
Draw_Star(rp,values3,rand()%420+110,rand()%180+110,rand()%200+33);
if(times==30) { times=0; Clear_Rastport(); }
}
}
die("");
}
int Clear_Rastport()
{
struct Image dummy =
{ 0,0,WIDTH,HEIGHT,0,NULL,0,0,NULL };
DrawImage(rp,&dummy,0,0);
return(1);
}
int Init_Colour()
{
int sec,micros;
SetRGB4(vp,1,15,0,0);
SetRGB4(vp,2,15,0,0);
SetRGB4(vp,3,15,15,0);
SetRGB4(vp,4,0,15,15);
SetRGB4(vp,5,15,0,15);
SetRGB4(vp,6,15,15,15);
SetRGB4(vp,7,0,0,15);
SetRGB4(vp,8,15,15,0);
SetRGB4(vp,9,6,15,6);
SetRGB4(vp,10,15,3,3);
SetRGB4(vp,11,15,3,9);
SetAPen(rp,11);
Move(rp,220,200);
Text(rp," STAR V1.0",17);
Move(rp,216,215);
Text(rp," By Jason Lowe",19);
Move(rp,215,230);
SetAPen(rp,6);
Text(rp," Calculating points",22);
Move(rp,210,245);
Text(rp," Left Mouse Button EXITS",25);
Move(rp,210,260);
SetAPen(rp,8);
Text(rp," Source for this program",25);
Move(rp,205,275);
Text(rp,"is avalable from the author.",28);
Move(rp,207,290);
Text(rp," This program is 100% C.",26);
CurrentTime(&sec,µs); /* Reseed the random number generator */
srand(999*sec+micros);
return(1);
}
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/*************************** ************************/
/*************************** Functions.... ************************/
/*************************** ************************/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
int idcmpch()
{
if(win->UserPort->mp_SigBit)
if(message=(struct IntuiMessage *)GetMsg(win->UserPort))
{
class=message->Class;
code=message->Code;
ReplyMsg((struct IntuiMessage *)message);
switch(class)
{
case MOUSEBUTTONS:
switch(code)
{
case SELECTDOWN:
return(1);
}
}
}
return(0); /* Nothing interesting! */
}
Open_Stuff()
{
void *OpenLibrary();
struct Window *OpenWindow();
struct Screen *OpenScreen();
if(!(IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0)))
die("Can't open intuition.library");
if(!(GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0)))
die("Can't open graphics library");
if((scr=OpenScreen(&ns))==NULL)
;
nw.Screen=scr;
if(!(win=(struct Window *)OpenWindow(&nw)))
die("Can't open window");
rp=win->RPort;
vp=&scr->ViewPort;
SetRGB4(vp,0,0,0,0);
return(TRUE);
}
int die(s)
char *s[];
{
char Alert[300];
register int loop;
if(strlen(s)!=0) /* Display alert if s isn't NULL */
{
memset((void *)Alert,0,sizeof(Alert));
strcat(Alert,s);
strcat(Alert," Press either mouse button to continue.");
loop=strlen(s);
Alert[0]=0; Alert[1]=32; Alert[2]=16;
Alert[loop+2]='\0'; Alert[loop+3]=TRUE;
Alert[loop+4]=0; Alert[loop+5]=32; Alert[loop+6]=32;
Alert[loop+45]='\0'; Alert[loop+46]=FALSE;
DisplayAlert(RECOVERY_ALERT,Alert,48);
}
if(values1) Free_Values(values1);
if(values2) Free_Values(values2);
if(values3) Free_Values(values3);
if(win) CloseWindow(win);
if(scr) CloseScreen(scr);
if(GfxBase) CloseLibrary(GfxBase);
if(IntuitionBase) CloseLibrary(IntuitionBase);
exit();
return(1);
}